package com.algaworks.cursojsf2.financeiro.view;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ValueChangeEvent;

import com.algaworks.cursojsf2.financeiro.model.Pessoa;
import com.algaworks.cursojsf2.financeiro.model.RamoAtividade;
import com.algaworks.cursojsf2.financeiro.model.TipoPessoa;
import com.algaworks.cursojsf2.financeiro.repository.RamosAtividade;
import com.algaworks.cursojsf2.financeiro.service.GestaoPessoas;
import com.algaworks.cursojsf2.financeiro.util.FacesUtil;
import com.algaworks.cursojsf2.financeiro.util.Repositorios;

@ManagedBean
@ViewScoped
public class CadastroPessoaBean {
	
	private Repositorios repositorios = new Repositorios();
	private Pessoa pessoa = new Pessoa();
	private List<RamoAtividade> atividades = new ArrayList<RamoAtividade>();

	private boolean tipoJuridico;
	private boolean tipoFisico;
	
	public void mudancaTipo(ValueChangeEvent event) {

		if (event.getNewValue().equals(TipoPessoa.JURIDICA))
			this.setTipoJuridico(true);
		else
			this.setTipoJuridico(false);
		
		if (event.getNewValue().equals(TipoPessoa.FISICA))
			this.setTipoFisico(true);
		else
			this.setTipoFisico(false);

		FacesContext.getCurrentInstance().renderResponse();
	}

	@PostConstruct
	public void init() {
		RamosAtividade ramosAtividade = this.repositorios.getRamosAtividade();
		this.atividades = ramosAtividade.todos();
	}
	
	public boolean isEditar(){
		return this.pessoa.getCodigo() != null;
	}

	public TipoPessoa[] getTiposPessoa() {
		return TipoPessoa.values();
	}

	public void gravar() {

		GestaoPessoas gestaoPessoas = new GestaoPessoas(this.repositorios.getPessoas());
		
		try{
		gestaoPessoas.salvar(this.pessoa);
		
		this.pessoa = new Pessoa();
		
		FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, "Salvo com sucesso!");
		
		} catch (Exception e){
			FacesUtil.adicionarMensagem(FacesMessage.SEVERITY_INFO, e.getMessage());
		}
	}


	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
		if(this.pessoa == null)
			this.pessoa = new Pessoa();
	}

	public List<RamoAtividade> getAtividades() {
		return atividades;
	}

	public void setAtividades(List<RamoAtividade> atividades) {
		this.atividades = atividades;
	}
	
	public boolean isTipoFisico() {
		return tipoFisico;
	}

	public void setTipoFisico(boolean tipoFisico) {
		this.tipoFisico = tipoFisico;
	}

	public boolean isTipoJuridico() {
		return tipoJuridico;
	}

	public void setTipoJuridico(boolean tipoJuridico) {
		this.tipoJuridico = tipoJuridico;
	}

}
